/*    file: RtpHeader.h
 *    desc:
 *   
 * created: 2014-07-21 16:32:45
 *  author: zhengchuanjiang
 * company: 
 */ 


#if !defined RTPHEADER_H_
#define RTPHEADER_H_

////////////////////////////////////////////////////////////////////////////
#pragma pack(1)

typedef struct 
{
    /**//* byte 0 */
    unsigned char csrc_len:4;        /**//* expect 0 */
    unsigned char extension:1;        /**//* expect 1, see RTP_OP below */
    unsigned char padding:1;        /**//* expect 0 */
    unsigned char version:2;        /**//* expect 2 */
    /**//* byte 1 */
    unsigned char payload:7;        /**//* RTP_PAYLOAD_RTSP */
    unsigned char marker:1;        /**//* expect 1 */
    /**//* bytes 2, 3 */
    unsigned short seq_no;            
    /**//* bytes 4-7 */
    unsigned  long timestamp;        
    /**//* bytes 8-11 */
    unsigned long ssrc;            /**//* stream number is used here. */
} RTP_FIXED_HEADER;


typedef struct {
    unsigned short profile;
    unsigned short length;
} RTP_EXT_HEADER;


#pragma pack()


/******************************************************************
NALU_HEADER
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI|  Type   |
+---------------+
******************************************************************/
typedef struct {
    //byte 0
    unsigned char TYPE : 5;
    unsigned char NRI : 2;
    unsigned char F : 1;
} NALU_HEADER; /* 1 byte */

               /******************************************************************
               FU_INDICATOR
               +---------------+
               |0|1|2|3|4|5|6|7|
               +-+-+-+-+-+-+-+-+
               |F|NRI|  Type   |
               +---------------+
               ******************************************************************/
typedef struct {
    //byte 0
    unsigned char TYPE : 5;
    unsigned char NRI : 2;
    unsigned char F : 1;
} FU_INDICATOR; /*1 byte */

                /******************************************************************
                FU_HEADER
                +---------------+
                |0|1|2|3|4|5|6|7|
                +-+-+-+-+-+-+-+-+
                |S|E|R|  Type   |
                +---------------+
                ******************************************************************/
typedef struct {
    //byte 0
    unsigned char TYPE : 5;
    unsigned char R : 1;
    unsigned char E : 1;
    unsigned char S : 1;
} FU_HEADER; /* 1 byte */


typedef struct {
    unsigned char event;
    unsigned char volume : 6;
    unsigned char R : 1;
    unsigned char E : 1;
    unsigned short duration;
} DTMF_FORMAT;

////////////////////////////////////////////////////////////////////////////
#endif //RTPHEADER_H_

